package com.gxa.jjty.phy.service.impl;


import com.gxa.jjty.core.exception.BusinessException;
import com.gxa.jjty.core.util.SendSms;
import com.gxa.jjty.phy.service.SmsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.concurrent.TimeUnit;

/**
 *业务中使用redis，应该用@Transactional管理redis的连接: 操作完毕会自动执行close
 * @ClassName SmsServiceImpl
 * @Author: ws
 * @date 2021/11/29 15:34
 */
@Service("smsService")
@Transactional(rollbackFor = Throwable.class)
public class SmsServiceImpl implements SmsService {

    /**
     * 把短信缓存子啊redis服务器中，30分钟有效
     * 切记，要配置key和value的序列化方法: RedisConfig
     */
    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    // redis存储的key设为常量
    public static final String LOGIN_SMS="login_sms:";

//    @Override
//    public void sendLoginSms(String phone) throws BusinessException {
//
//        //一键登录 有没有账号都可以发送短信
//        //发送登录  没有注册账号就不行
//        //发送注册短信 注册了就不行
//
//        //1.生成验证码(用工具类的静态方法调用)
//        String msgCode = SendSms.getMsgCode();
//
//        //生成的验证码打印在控制台用于作弊获取
//        System.out.println("===============msgCode===============:"+msgCode);
//
//        //2.服务器存储验证码并设置失效时间为30分钟
//        //key: login_sms+用户手机号
//        //value: 用户收到的短信验证码
//        redisTemplate.boundValueOps(LOGIN_SMS+phone).set(msgCode,30, TimeUnit.MINUTES);
//
//        //3.调用工具类发送短信给用户
//        // String templateParam = "{\"getCode\":\""+msgCode+"\", \"storeName\":\"淘宝直营店\", \"address\":\"阿里巴巴上海分公司\",\"detail\":\"{1}号仓{2}件\"}";
//        // SendSms.sendSms(phone,code,templateParam);
//
//        // 4. 短信接口返回的数据
//        //SendSmsResponse response = sendSms(mobile,templateCode,templateParam);
//        // System.out.println("短信接口返回的数据----------------");
//        //System.out.println("Code=" + response.getCode());         // OK:成功
//        // System.out.println("Message=" + response.getMessage());
//        // System.out.println("RequestId=" + response.getRequestId());
//        // System.out.println("BizId=" + response.getBizId());
//
//    }

    @Override
    public String sendLoginSms(String phone) throws BusinessException {

        //一键登录 有没有账号都可以发送短信
        //发送登录  没有注册账号就不行
        //发送注册短信 注册了就不行

        //1.生成验证码(用工具类的静态方法调用)
        String msgCode = SendSms.getMsgCode();

        //生成的验证码打印在控制台用于作弊获取
        System.out.println("===============msgCode===============:"+msgCode);

        //2.服务器存储验证码并设置失效时间为30分钟
        //key: login_sms+用户手机号
        //value: 用户收到的短信验证码
        redisTemplate.boundValueOps(LOGIN_SMS+phone).set(msgCode,30, TimeUnit.MINUTES);

        return msgCode;

        //3.调用工具类发送短信给用户
        // String templateParam = "{\"getCode\":\""+msgCode+"\", \"storeName\":\"淘宝直营店\", \"address\":\"阿里巴巴上海分公司\",\"detail\":\"{1}号仓{2}件\"}";
        // SendSms.sendSms(phone,code,templateParam);

        // 4. 短信接口返回的数据
        //SendSmsResponse response = sendSms(mobile,templateCode,templateParam);
        // System.out.println("短信接口返回的数据----------------");
        //System.out.println("Code=" + response.getCode());         // OK:成功
        // System.out.println("Message=" + response.getMessage());
        // System.out.println("RequestId=" + response.getRequestId());
        // System.out.println("BizId=" + response.getBizId());

    }

}
